package com.youlin.controller;

import com.youlin.dto.BaseDataResDto;
import com.youlin.dto.BaseReqDto;
import com.youlin.dto.BaseResDto;
import com.youlin.dto.Status;
import com.youlin.dto.req.*;
import com.youlin.dto.res.AllTTResDto;
import com.youlin.dto.res.DMResDto;
import com.youlin.entities.*;
import com.youlin.service.*;
import com.youlin.untils.MyBeanUtil;
import com.youlin.untils.MyEnum;
import io.swagger.annotations.*;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;

@ApiSort(7)
@Api(tags = {"7 - 逝者信息管理"})
@RestController
@RequestMapping("/bygDeadMan")
public class BygDeadManController {

    @Autowired
    private BygDeadManService bygDeadManService;
    @Autowired
    private BygBgTemplateService bygBgTemplateService;
    @Autowired
    private BygTextTemplateService bygTextTemplateService;
    @Autowired
    private BygMusicTemplateService bygMusicTemplateService;
    @Autowired
    private BygPhotoService photoService;

    /**
     * 回显逝者资料、模板、相册
     * @return
     */
    @PostMapping("/operate/findDeadManById")
    @ApiOperationSort(1)
    @ApiOperation(value = "1 - 回显逝者资料、模板、相册", notes = "请求参数：data = 逝者ID")
    public BaseDataResDto<DMResDto> findDeadManById (@RequestBody BaseReqDto<String> baseReqDto) {
        String deadId = baseReqDto.getData();
        if (StringUtils.isBlank(deadId)) return new BaseDataResDto(Status.PARAMETERERROR);
        return bygDeadManService.findDeadManById (deadId);
    }

    /**
     * 编辑逝者资料
     * @param baseReqDto
     * @return
     */
    @PostMapping("/operate/editDeadManData")
    @ApiOperationSort(2)
    @ApiOperation(value = "2 - 编辑逝者资料")
    public BaseResDto editDeadManData (@RequestBody BaseReqDto<EditDMDataReqDto> baseReqDto) {
        EditDMDataReqDto data = baseReqDto.getData();
        if (MyBeanUtil.isParamError(data)) return new BaseResDto(Status.PARAMETERERROR);
        return bygDeadManService.editDeadManData (data);
    }

    /**
     * 获取背景模板封面列表
     * @return
     */
    @PostMapping("/operate/findAllBgTlIndexs")
    @ApiOperationSort(3)
    @ApiOperation(value = "3 - 获取背景模板封面列表")
    public BaseDataResDto<List<BygBgTemplate>> findAllBgTlIndexs () {
        return bygBgTemplateService.findAllBgTls (null, Arrays.asList(MyEnum.BG_TYPE_INDEX.getValue()));
    }

    /**
     * 设置背景模板
     * @param baseReqDto
     * @return
     */
    @PostMapping("/operate/setDMBg")
    @ApiOperationSort(4)
    @ApiOperation(value = "4 - 设置背景模板")
    public BaseResDto setDMBg (@RequestBody BaseReqDto<SetDMBgReqDto> baseReqDto) {
        SetDMBgReqDto data = baseReqDto.getData();
        if (MyBeanUtil.isParamError(data)) return new BaseResDto(Status.PARAMETERERROR);
        return bygDeadManService.editDeadManData (data);
    }

    /**
     * 获取文案选择中的背景模板列表
     * @return
     */
    @PostMapping("/operate/findAllBgTlsByName")
    @ApiOperationSort(5)
    @ApiOperation(value = "5 - 获取文案选择中的背景模板列表", notes = "请求参数：data = 背景模板ID")
    public BaseResDto<List<BygBgTemplate>> findAllBgTlsByName (@RequestBody BaseReqDto<Integer> baseReqDto) {
        Integer bgId = baseReqDto.getData();
        if (bgId == null) return new BaseResDto(Status.PARAMETERERROR);
        List<Integer> types = Arrays.asList(MyEnum.BG_TYPE_HEAD.getValue(),
                MyEnum.BG_TYPE_LIFE.getValue(), MyEnum.BG_TYPE_SINAME.getValue());
        return bygBgTemplateService.findAllBgTls (bgId, types);
    }

    /**
     * 获取所有文案模板列表
     * @return
     */
    @PostMapping("/operate/findAllTxTls")
    @ApiOperationSort(6)
    @ApiOperation(value = "6 - 获取所有文案模板列表")
    public BaseDataResDto<List<AllTTResDto>> findAllTxTls () {
        return bygTextTemplateService.findAllTxTls ();
    }

    /**
     * 设置文案模板
     * @param baseReqDto
     * @return
     */
    @PostMapping("/operate/setDMTX")
    @ApiOperationSort(7)
    @ApiOperation(value = "7 - 设置文案模板")
    public BaseResDto setDMTX (@RequestBody BaseReqDto<SetDMTXReqDto> baseReqDto) {
        SetDMTXReqDto data = baseReqDto.getData();
        if (MyBeanUtil.isParamError(data)) return new BaseResDto(Status.PARAMETERERROR);
        return bygDeadManService.editDeadManData (data);
    }

    /**
     * 获取背景音乐模板列表
     * @return
     */
    @PostMapping("/operate/findAllMsTls")
    @ApiOperationSort(8)
    @ApiOperation(value = "8 - 获取背景音乐模板列表")
    public BaseDataResDto<List<BygMusicTemplate>> findAllMsTls () {
        return bygMusicTemplateService.findAllMsTls ();
    }

    /**
     * 设置音乐模板
     * @param baseReqDto
     * @return
     */
    @PostMapping("/operate/setDMMs")
    @ApiOperationSort(9)
    @ApiOperation(value = "9 - 设置音乐模板")
    public BaseResDto setDMMs (@RequestBody BaseReqDto<SetDMMsReqDto> baseReqDto) {
        SetDMMsReqDto data = baseReqDto.getData();
        if (MyBeanUtil.isParamError(data)) return new BaseResDto(Status.PARAMETERERROR);
        return bygDeadManService.editDeadManData (data);
    }

    /**
     * 添加或修改逝者相册照片数据
     * @return
     */
    @PostMapping("/operate/saveDmPhotos")
    @ApiOperationSort(10)
    @ApiOperation(value = "10 - 添加或修改逝者相册照片数据", notes = "响应参数：status-message = " +
            "{1021-逝者相册有且只有一张为家庭照，1034-照片尺寸错误(520*700/625*415/530*620)}")
    public BaseResDto editDmPhotos (@RequestBody BaseReqDto<List<PhotoReqDto>> baseReqDto) {
        List<PhotoReqDto> photos = baseReqDto.getData();
        if (MyBeanUtil.isEmpty(photos)) return new BaseResDto(Status.PARAMETERERROR);
        return photoService.editDmPhotos (photos);
    }

    /**
     * 删除逝者相册照片数据
     * @return
     */
    @PostMapping("/operate/delDmPhoto")
    @ApiOperationSort(11)
    @ApiOperation(value = "11 - 删除逝者相册照片数据", notes = "请求参数：data = 照片ID \n" +
            "响应参数：status-message = {1029-不能删除家庭照}")
    public BaseResDto delDmPhoto (@RequestBody BaseReqDto<Integer> baseReqDto) {
        Integer photoId = baseReqDto.getData();
        if (photoId == null) return new BaseResDto(Status.PARAMETERERROR);
        return photoService.delDmPhoto (photoId);
    }

}

